/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

#pragma once

#include <IOmenTexture.h>

namespace Omen
{
    class IImageFileReader;

    class Texture : public Omen::ITexture
    {
    public:
        #define GUID_OMEN_TEXTURE "B174C179-F836-4BAB-B30B-56CF25257247"
    public:
        typedef enum
        {
            TextureType_1D,
            TextureType_2D,
            TextureType_3D
        } TextureType;

    public:
        OMEN_API virtual Omen_GUID classId() const { return OMEN_UUID(GUID_OMEN_TEXTURE); }  /// <summary>Defines the class ID</summary>

        OMEN_API Texture() {};
        OMEN_API Texture( const Omen::ITexture& other );
        OMEN_API virtual void setFilePath( const std::wstring& filePath );                   /// <summary>Set the file path of the texture</summary>
        OMEN_API virtual std::wstring filePath() const;                                     /// <summary>Returns the file path of the texture</summary>
        OMEN_API virtual std::wstring& filePath();                                     /// <summary>Returns the file path of the texture</summary>

        OMEN_API virtual Omen::Float u_scale() const;
        OMEN_API virtual Omen::Float v_scale() const;
        OMEN_API virtual Omen::Float u_offset() const;
        OMEN_API virtual Omen::Float v_offset() const;

        OMEN_API virtual Omen::Float rotation() const;
        OMEN_API virtual WORD tiling() const;

        OMEN_API virtual void set_u_scale(Omen::Float scale);
        OMEN_API virtual void set_v_scale(Omen::Float scale);
        OMEN_API virtual void set_u_offset(Omen::Float offset);
        OMEN_API virtual void set_v_offset(Omen::Float offset);

        OMEN_API virtual void setRotation(Omen::Float rotation);
        OMEN_API virtual void setTiling(WORD tiling);

    protected:
    private:
        std::wstring    m_textureFilePath;
        Omen::Float     m_uScale, m_vScale, m_uOffset, m_vOffset, m_rotation;
        WORD            m_tiling;
    };
}

/// EOF